#include <iostream>
#include <queue>
#include <vector>
using namespace std;

const int kMaxN = 1010;
const int kInf = 1e9;

struct Graph {
  int n;
  vector<pair<int, int>> g[kMaxN];
  int dist[kMaxN];
  int cnt[kMaxN];
  bool in_que[kMaxN];
  queue<int> que;

  void AddEdge(int u, int v, int w) {
    g[u].emplace_back(v, w);
  }

  void Renew(int v, int d, int path_len) {
    if (dist[v] > d) {
      dist[v] = d;
      if (!in_que[v]) {
        in_que[v] = true;
        que.push(v);
      }
      cnt[v] = path_len;
    }
  }

  bool SPFA(int s = 1) {
    fill(dist, dist + n + 1, kInf);
    fill(cnt, cnt + n + 1, 0);
    fill(in_que, in_que + n + 1, false);
    Renew(s, 0, 0);

    while (!que.empty()) {
      int u = que.front();

      in_que[u] = false;
      que.pop();
      for (const pair<int, int>& e : g[u]) {
        Renew(e.first, dist[u] + e.second, cnt[u] + 1);
        if (cnt[e.first] >= n) {
          return false;
        }
      }
    }
    return true;
  }
};

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  Graph graph;
  int m;

  cin >> graph.n >> m;
  for (int i = 0; i < m; i++) {
    int u, v, w;

    cin >> u >> v >> w;
    graph.AddEdge(u, v, -w);
  }
  if (graph.SPFA(1)) {
    int ans = graph.dist[graph.n];

    graph.SPFA(graph.n);
    ans = min(ans, graph.dist[1]);
    cout << ans << "\n";
  } else {
    cout << "Forever love\n";
  }
  return 0;
}